package com.marketing.common.utils;

import cn.hutool.core.util.StrUtil;

import java.util.Collection;
import java.util.Map;

/**
 * 字符串工具类
 */
public class StringUtils extends StrUtil {
    
    /**
     * 判断字符串是否为空或空白
     * 
     * @param str 字符串
     * @return 是否为空或空白
     */
    public static boolean isBlank(CharSequence str) {
        return StrUtil.isBlank(str);
    }
    
    /**
     * 判断字符串是否不为空且不为空白
     * 
     * @param str 字符串
     * @return 是否不为空且不为空白
     */
    public static boolean isNotBlank(CharSequence str) {
        return StrUtil.isNotBlank(str);
    }
    
    /**
     * 判断对象是否为空
     * 
     * @param obj 对象
     * @return 是否为空
     */
    public static boolean isEmpty(Object obj) {
        if (obj == null) {
            return true;
        }
        
        if (obj instanceof CharSequence) {
            return ((CharSequence) obj).length() == 0;
        }
        
        if (obj instanceof Collection) {
            return ((Collection<?>) obj).isEmpty();
        }
        
        if (obj instanceof Map) {
            return ((Map<?, ?>) obj).isEmpty();
        }
        
        return false;
    }
    
    /**
     * 判断对象是否不为空
     * 
     * @param obj 对象
     * @return 是否不为空
     */
    public static boolean isNotEmpty(Object obj) {
        return !isEmpty(obj);
    }
    
    /**
     * 隐藏手机号中间4位
     * 
     * @param phone 手机号
     * @return 隐藏后的手机号
     */
    public static String hidePhone(String phone) {
        if (isBlank(phone) || phone.length() < 11) {
            return phone;
        }
        return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
    }
    
    /**
     * 隐藏邮箱中间部分
     * 
     * @param email 邮箱
     * @return 隐藏后的邮箱
     */
    public static String hideEmail(String email) {
        if (isBlank(email) || !email.contains("@")) {
            return email;
        }
        
        String[] parts = email.split("@");
        String username = parts[0];
        String domain = parts[1];
        
        if (username.length() <= 2) {
            return email;
        }
        
        String hiddenUsername = username.substring(0, 2) + "***";
        return hiddenUsername + "@" + domain;
    }
    
    /**
     * 隐藏身份证号中间部分
     * 
     * @param idCard 身份证号
     * @return 隐藏后的身份证号
     */
    public static String hideIdCard(String idCard) {
        if (isBlank(idCard) || idCard.length() < 18) {
            return idCard;
        }
        return idCard.replaceAll("(\\d{6})\\d{8}(\\w{4})", "$1********$2");
    }
}